package br.com.bbsys.dao.usuario;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;
import br.com.bbsys.model.usuario.Usuario;
import br.com.caelum.vraptor.ioc.Component;
@Component
public class UsuarioDao {
private EntityManager manager;
private final Session session;
public UsuarioDao(Session session){
this.session = session;
}
/*
public UsuarioDao (EntityManager manager) {
this.manager = manager;
}*/
public Usuario loadByEmailAndSenha(String email, String senha) throws Exception {
try {
Usuario usuario = session.load(Usuario.class, email, senha);
/*Query query = manager.createQuery("from Usuario where email = :email and senha = :senha");
query.setParameter("email", email);
query.setParameter("senha", senha);
Usuario usuario = (Usuario) query.getSingleResult();*/
return usuario;
} catch (NoResultException e) {
manager.getTransaction().rollback();
throw new Exception("Nenhum resultado!");
} catch (Exception e) {
manager.getTransaction().rollback();
throw new Exception("Ocorreu um erro na busca!");
}
}
public void salva(Usuario usuario) {
Transaction tx = session.beginTransaction();
session.save(usuario);
tx.commit();
}
@SuppressWarnings("unchecked")
public List<Usuario> listaUsuarios(){
return this.session.createCriteria(Usuario.class).list();
}
public Usuario carrega(Integer id) {
return (Usuario) this.session.load(Usuario.class, id);
}
public void atualiza(Usuario usuario) {
Transaction tx = session.beginTransaction();
session.update(usuario);
tx.commit();
}
public void remove(Usuario usuario) {
Transaction tx = session.beginTransaction();
this.session.delete(usuario);
tx.commit();
}
@SuppressWarnings("unchecked")
public List<Usuario> busca(String nome) {
return session.createCriteria(Usuario.class)
.add(Restrictions.ilike("name", nome, MatchMode.ANYWHERE))
.list();
}
public void recarrega(Usuario usuario) {
session.refresh(usuario);
}
}